package _08_factory_method_pattern.v2_0_simple_factory;

import _08_factory_method_pattern.v2_0_simple_factory.human.Human;

/**
 * @Description:
 * HumanFactory类仅有两个地方发生变化：去掉继承抽象类，并在createHuman前增加static
 * 关键字；工厂类发生变化，也同时引起了调用者NvWa的变化.
 * 运行结果没有发生变化，但是我们的类图变简单了，而且调用者也比较简单，该模式是
 * 工厂方法模式的弱化，因为简单，所以称为简单工厂模式（Simple Factory Pattern），也叫做
 * 静态工厂模式。
 * 在实际项目中，采用该方法的案例还是比较多的，其缺点是工厂类的扩展比
 * 较困难，不符合开闭原则，但它仍然是一个非常实用的设计模式。
 * @Auther: 2019/6/11 15:54 by zhang.jy
 */

public class HumanFactory {
	/**
	 * @Description: 静态代码块
	 * @Auther: 2019/6/11 15:56 by zhang.jy
	 */
	public static <T extends Human> T createHuman(Class<T> c) {
		//定义一个生产出的人种
		Human human = null;
		try {
			//产生一个人种
			human = (Human) Class.forName(c.getName()).newInstance();
		} catch (Exception e) {
			System.out.println("人种生成错误！");
		}
		return (T) human;
	}
}